Ссылки по теме

*   [Arch Build System (Русский)](/index.php/Arch_Build_System_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch Build System (Русский)")
*   [pacman (Русский)](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)")
*   [LVM (Русский)](/index.php/LVM_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "LVM (Русский)")

В этом руководстве описывается процесс отката установленного пакета к его предыдущей версии. Откат версии пакета не рекомендуется и применяется в том случае, когда в текущем пакете обнаружена ошибка.

Прежде чем откатить пакет, подумайте, нужно ли это делать. Если необходимость отката вызвана ошибками, пожалуйста, помогите сообществу Arch и разработчикам этого ПО, потратьте несколько минут на составление отчета об ошибке и отправке его в трекер ошибок Arch или на сайт самого проекта. В связи с безрелизной моделью развития Arch при продолжительном его использовании, Вы, возможно, периодически будете сталкиваться с ошибками в новых пакетах. Наше сообщество и разработчики ПО будут признательны Вам за приложенные усилия. Дополнительная информация может не только спасти нас от часов тестирования и отладки, но также позволит повысить стабильность программного обеспечения.

## Contents

*   [1 Причины](#.D0.9F.D1.80.D0.B8.D1.87.D0.B8.D0.BD.D1.8B)
*   [2 Подробности](#.D0.9F.D0.BE.D0.B4.D1.80.D0.BE.D0.B1.D0.BD.D0.BE.D1.81.D1.82.D0.B8)
*   [3 Инструкция по откату пакетов](#.D0.98.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BA.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D0.BE.D1.82.D0.BA.D0.B0.D1.82.D1.83_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2)
*   [4 Поиск старых версий](#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA_.D1.81.D1.82.D0.B0.D1.80.D1.8B.D1.85_.D0.B2.D0.B5.D1.80.D1.81.D0.B8.D0.B9)
    *   [4.1 Зеркала Out-Of-Sync](#.D0.97.D0.B5.D1.80.D0.BA.D0.B0.D0.BB.D0.B0_Out-Of-Sync)
    *   [4.2 ARM](#ARM)
    *   [4.3 Re-компиляция пакетов](#Re-.D0.BA.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D0.B8.D1.8F_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2)
*   [5 Дополнительная информация](#.D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.B0.D1.8F_.D0.B8.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D1.8F)
    *   [5.1 Я не могу откатить пакет из-за зависимостей.](#.D0.AF_.D0.BD.D0.B5_.D0.BC.D0.BE.D0.B3.D1.83_.D0.BE.D1.82.D0.BA.D0.B0.D1.82.D0.B8.D1.82.D1.8C_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82_.D0.B8.D0.B7-.D0.B7.D0.B0_.D0.B7.D0.B0.D0.B2.D0.B8.D1.81.D0.B8.D0.BC.D0.BE.D1.81.D1.82.D0.B5.D0.B9.)
    *   [5.2 Как я могу запретить pacman обновлять некоторые пакеты?](#.D0.9A.D0.B0.D0.BA_.D1.8F_.D0.BC.D0.BE.D0.B3.D1.83_.D0.B7.D0.B0.D0.BF.D1.80.D0.B5.D1.82.D0.B8.D1.82.D1.8C_pacman_.D0.BE.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D1.8F.D1.82.D1.8C_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D1.8B.3F)
    *   [5.3 Я хочу вернуться ко вчерашнему состоянию своей системы.](#.D0.AF_.D1.85.D0.BE.D1.87.D1.83_.D0.B2.D0.B5.D1.80.D0.BD.D1.83.D1.82.D1.8C.D1.81.D1.8F_.D0.BA.D0.BE_.D0.B2.D1.87.D0.B5.D1.80.D0.B0.D1.88.D0.BD.D0.B5.D0.BC.D1.83_.D1.81.D0.BE.D1.81.D1.82.D0.BE.D1.8F.D0.BD.D0.B8.D1.8E_.D1.81.D0.B2.D0.BE.D0.B5.D0.B9_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B.)

## Причины

Процесс отката (понижения) версии пакета заключается в удалении текущей версии пакета и установке вместо нее предыдущей. Откат может выполняться как до предыдущей версии, так и до любой доступной.

Причины понижения версии (среди прочих) могут быть следующие: ошибка в текущей версии, отсутствие требуемой функциональности или установка пакета с целью эксперимента. В любом из этих случаев пользователю, возможно, будет менее проблематично вернуться к старой версии пакета, чем ожидать нового релиза..

Откат версии одного пакета может повлечь за собой необходимость понижения версий других пакетов. При наличии большого количества экспериментальных и тестовых пакетов, а также отредактированных конфигурационных файлов полная переустановка системы может оказаться предпочтительнее откату версий.

## Подробности

Тем не менее, пользователю нужно учесть следующие моменты:

*   Во-первых, понадобится решить вопрос с зависимостями каждой из программ. Необходимые библиотеки могут изменяться с каждой новой версией, функционально связанные с ними файлы, также могут полностью отличаться от предыдущих. Поэтому, возможно, потребуется их замена на более ранние версии.

*   Во-вторых, в случае удаления необходимых версий пакетов из системы, необходимо убедиться, в их доступности из другого источника. Это связано с безрелизной моделью развития системы Arch Linux, репозитории автоматически обновляются без сохранения старых версий пакетов. Подробнее об этой проблеме ниже.

*   В-третьих, следует соблюдать осторожность при внесении изменений в конфигурационные файлы и сценарии. На данный момент, во избежание возможных проблем, лучше использовать pacman, хотя и он имеет некоторые ограничения.

Сейчас находится в разработке концепция Машины Отката Arch ([Arch Rollback Machine](/index.php/Arch_Rollback_Machine "Arch Rollback Machine")) и при готовности она будет включена в стандартные средства pacman. Как только это произойдет, процесс станет автоматизированным.

А пока следуйте данным инструкциям.

## Инструкция по откату пакетов

*   В: Я только что выполнил `pacman -Syu` и пакет *XYZ* с версии М был обновлен до версии N. Обновление пакета вызывает проблемы на моем компьютере, как я могу откатить версию N к старой версии M?
*   О: Версию пакета можно понизить элементарно, для этого найдите старую версию нужного пакета в директории `/var/cache/pacman/pkg` (если ранее не запускали `pacman -Scc`, то нужный пакет будет там). Если пакет есть, то его можно установить, выполнив `pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz`. Если нужный пакет был скачан вручную, то понадобится указать полный путь к пакету.

Эта команда удалит существующий пакет, проверив при этом все изменяющиеся зависимости, и установит более старую версию пакета.

**Примечание:** При изменении основных компонентов операционной системы, может возникнуть необходимость замены десятков пакетов на более старые версии. Или же пакеты могут у вас просто отсутствовать, и тогда их придется разыскивать самостоятельно, следя при этом, чтоб при обновлении повторно не были установлены нежелательные версии пакетов.

В [AUR](/index.php/Arch_User_Repository_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch User Repository (Русский)") доступен пакет под названием [downgrade](https://aur.archlinux.org/packages/downgrade/). Это простой скрипт на Bash, который ищет в кэше старые версии пакета. Если пакет не будет найден, то он может искать в [A.R.M.](#ARM). Затем понадобится выбрать пакет для установки. Здесь описаны основные возможности пакета по автоматизации процесса. Для получения дополнительной информации выполните: `downgrade --help`.

Также для отката пакетов вы можете воспользоваться программой [downgrader](https://aur.archlinux.org/packages/downgrader/) - это мощная программа, написанная на C++, работает с логами pacman, кэшем пакетов и ARM. Она поможет откатить пакет к предыдущей версии по данным из логов, сама найдет, скачает и установит нужный пакет. Также она умеет работать с несколькими пакетами одновременно, например, если система стала нестабильна после большого обновления. Для получения дополнительной информации обратитесь к [этой](http://archlinux.org.ru/forum/topic/4262/) теме форума.

## Поиск старых версий

Существует три способа поиска.

### Зеркала Out-Of-Sync

При отсутствии старых версий пакетов, нужно проверить, не синхронизировалось ли одно из зеркал, и получить пакет оттуда. Нажмите здесь, чтобы посмотреть [статус зеркал](http://users.archlinux.de/~gerbra/mirrorcheck.html).

Также нужные пакеты можно поискать на этом зеркале:

*   [http://schlunix.org/?page_id=11](http://schlunix.org/?page_id=11)

### ARM

[Arch Rollback Machine](http://seblu.net/) ([ARM](/index.php/Arch_Rollback_Machine "Arch Rollback Machine")) содержит архив снимков (snapshots) всех репозиториев, начиная с 31 августа 2013\. Она может быть использована для установки предыдущей версии пакета или даже отката версий пакетов системы по состоянию на определенную дату. Для получения дополнительной информации смотрите раздел [Arch Rollback Machine#Time travel](/index.php/Arch_Rollback_Machine#Time_travel "Arch Rollback Machine").

### Re-компиляция пакетов

В худшем случае, если пакет не найден в другом месте, вам придется самостоятельно собирать себе старую версию. Для этого нужен файл [PKGBUILD](/index.php/PKGBUILD_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "PKGBUILD (Русский)"), можно для изменения взять существующий PKGBUILD из [ABS](/index.php/ABS "ABS") или найти нужный пакет на [https://www.archlinux.org/packages/](https://www.archlinux.org/packages/). После того, как вы его нашли, нажмите кнопку "Открыть логи SVN" и выберите "Просмотр журнала". Найдите нужный вариант и нажмите на ссылку. Далее просто скачайте файлы, расположенные в этом каталоге, и создайте пакет с помощью с makepkg.

## Дополнительная информация

Изменение основных настроек менеджера пакетов [pacman](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)") осуществляется с помощью редактирования файла `pacman.conf`, для редактироваия файла понадобятся права root. Для правки файла следует набрать в командной строке

```
nano /etc/pacman.conf

```

(Конечно можно редактировать файл и с помощью графических утилит, например Shaman, но чаще намного быстрее и безопаснее выполнять такие действия из командной строки.)

Достаточно просто изменить адреса репозиториев, в которых **pacman** осуществляет поиск программ. Для скрытия от **pacman** и системы управления пакетами определенного репозитория нужно в начало строки репозитория, добавить знак фунта (#).

Например, для добавления репозитория с ARM, нужно закомментировать старую строку, и добавить новую с соответствующими путями, формат:

```
[core]
#Server=http://mirrors.gigenet.com/archlinux/core/os/i686
Server=http://arm.konnichi.com/2009/11/01/core/os/i686

```

В этом примере, дата в имени раздела указывает на то, что в нем расположены все пакеты, которые были доступны на 1 ноября 2009 года. Обратите внимание, что все репозитории являются снимками (snapshots) официального репозитория. Далее нужно разместить зеркало ARM в самом верху `/etc/pacman.d/mirrorlist`. Так для синхронизации всех официальных репозиториев ARM, перечисленных в `/etc/pacman.conf`, нужно выбрать на зеркале [http://arm.konnichi.com/2009/11/01/](http://arm.konnichi.com/2009/11/01/), например, $repo/os/i686, и выполнить:

```
pacman -Syy # получить список пакетов
pacman -Suu # откатить все пакеты до версии в репозитории

```

Но все это не гарантирует полностью автоматического отката, так как иногда имеющаяся версия пакета не совпадает с требующейся. В таком случае можно поискать нужную версию пакета на глобальном зеркале, например [http://arm.konnichi.com/core/os/i686](http://arm.konnichi.com/core/os/i686), обратите внимание на отсутствие даты в пути.

Для получения дополнительной информации изучите [pacman (Русский)](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)").

### Я не могу откатить пакет из-за зависимостей.

При обновлении или удалении с помощью `pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz`, можно игнорировать зависимости, но учитывайте, что в дальнейшем это может привести к проблемам в системе.

### Как я могу запретить pacman обновлять некоторые пакеты?

Добавить название пакета в строку "IgnorePkg" файла `/etc/pacman.conf`. `IgnorePkg = package1 package2 ...` в `pacman.conf` запретит pacman, при выполнении `--sysupgrade`, устанавливать обновления для выбранных пакетов.

### Я хочу вернуться ко вчерашнему состоянию своей системы.

Легко осуществимо при использовании механизма периодических снимков (snapshots) [LVM](/index.php/LVM "LVM").